Skip to content

Frankenstein Station 13: Introducing dissections and alien organs to xenobiology #29093

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 162 commits into
base: master
Choose a base branch
from

Conversation

EmeraldCandy
Copy link
Contributor

@EmeraldCandy EmeraldCandy commented Apr 22, 2025

What Does This PR Do

The PR page should be primarily for issue reporting. Please direct general chatter to:
https://discord.com/channels/145533722026967040/1362583282692395058

for a list of all organ abilities, functions, and progress, refer to the excel document here:
https://docs.google.com/spreadsheets/d/19WGbyGu1gzqhWUTsYu4SBNqetkCBr8vkhoc-zyoaXUY/edit?usp=sharing

Here are some wiki pages for the upcomming features:

https://www.paradisestation.org/wiki/index.php?title=Xenobiologist_Temp_Page

https://www.paradisestation.org/wiki/index.php?title=Xenobiology_guide_Temp_Page

Xenobiology has lacked content for a long time. Slimes are neat, but it gets pretty boring and many times is abandoned halfway through the shift. Now, xenobiologists have a handfull of new things that they can pursue over the course of the shift: Xeno organs! (not xenomorph. Okay well, not specifically xenomorph). This PR introduces the ability to dissect organs out of alien life, and allows them to be revitalized via slime therapy to turn into useful organs. These organs can then be implanted into others, or simply processed in the new Organ Analyzer machine to turn into research credits and potentially high-tier research disks!

Dissecting
Dissecting is a fairly straightforward process. All dissections begin with the dissection manager, though this can only be started on creatures that contain a xeno organ at all. This then follows normal surgical steps: Scalpel, hemostat, retractors, and finishing by pulling out the organ with the dissection manager. While there is a standard dissection procedure, not all creatures are created equal! Some creatures have different steps to open their surgical site. If you're ever unsure, just examine the creature after the initial dissection step and it will guide you. Ash drakes, for example, will require a bone saw to cut through their mighty scales, then removing said scales via a hemostat before you can reach its squishy flesh. Blobbernaughts, on the other hand, require retracting the incision back open every other step because THEIR GOOPY BODY KEEPS CLOSING THE DAMNED INCISION SITE!

The Organs
After dissection, the scientist will be rewarded with an unidentified organ. This organ, while currently useless, can have its potential unlocked by revitalizing it via slime therapy in xenobiology (listed below). Each creature will have a list of possible organs available to them, with each most creatures having at least one unique organ available to them. Seeing as only one can be pulled from each creature, multiple corpses may be required to obtain a desired organ. Each organ will have a randomized icon, so good luck telling them apart!

Each organ also has one of three quality levels: Damaged, normal, and pristine. This is nfluenced by two factors: The dissection manager level used, and any smith tool bit modifications attached to the device. Tools with a better failure rate chance will net, on average, higher quality organs! Most of the time this will only marginally make that organ function better, however occasionally a pristine (or even damaged) quality will have unique effects.

Slime Revitalization Therapy
Unidentified organs will be unusable in their current state, being pulled from a corpse and all. These organs will need to be inserted into a slime in order to revive it. However, not any ol slime will do. Slimes must be befriended before they will accept foreign object inside of them. First one needs to discipline a slime, which can be done a few ways. A slime that tries to eat someone out of hunger, then shoved off will have a chance to discipline it. A slime hit by an object of sufficient force will have a low chance a disciplining it, but beware of retaliation! Spray bottles filled with water are also a great way to discipline slimes, however this only works if they are chasing someone or are trying to eat them. Extinguishers wont work for this, itll just make them mad. Especially trained slimes! The most consistent way to discipline however, is to feed a slime 5 sheets of plasma, which will make it very happy!

After a slime is sufficiently disciplined, it will require an additional 5 sheets of plasma to cement its training. A trained slime will be able to take xeno organs into itself and revitalize them. A trained slime will be noticeable by the ":3" big smile on its face! happy slime! After a while itll eject the revitalized organ, ready to be implanted or analyzed! Additionally, trained slimes are less likely to become aggressive when abused or hungry.

Would you believe most this slime behavior was already in the game before this PR?

Organ Analyzer
The organ analyzer is fairly straight forward. A newly revitalized is slotted into the machine, after which it can be activated with an empty hand to start the process. When its done after a few seconds, the organ will be destroyed, but will grant the science department credits based off of what organ was destroyed, and potentially generate a high-level research disk based off of what kind of organ it was. Its a give-and-take!

New Job Role
With these expanded changes, its been agreed that xenobiology will be made its own proper job slow now, consisting of two job slots. This role will not have RnD Access, however it will have the benefit of mining, EVA, and teleporter access to compensate for the more mobile playstyle of xenobiologists going into the field. Likewise, xenobiology will be gaining its own access, with their work area being solely accessible by the biologists. They will retain sci-chem access.

As a side effect from this PR several changes have occured:

  • all megafauna have been granted a corpse sprite, so that there is a body to extract the organs from.
  • All megafauna corpses are un-pullable. Mr science man is going to have to get his hands dirty down there.
  • Organs datum had a bit of a refactor to account for all the new processes, thus abductor organs were affected (but should be unchanged from their original design).
  • added dissectors and regen mesh to maints as a sufficiently rare spawn

Why It's Good For The Game

Xenobio and science in general has needed content. Xeno bio needs more reasons to get out into the station/world and do more and have more reasons to talk to people. From shift start, xeno can get every color slime in 30-40 minutes and then they have nothing else to do. (at least I can). Slime ranching is alright, its pretty cathartic, but theres not much at the end of the road to achieve. Now, we can make HORRIBLE MONSTROSITIES out of crew!

Images of changes

Thank you to Ell Good (audrey) on discord for basically every single sprite given to this PR

image
image
image
image
image
image

Todo:

  • Implement organ quality
  • give megafauna corpses proper
  • implement tool bits to dissection managers
  • code every. single. organ AND their quality effects
  • assign every eligible creature their potential organ list
  • assign every eligible creature their surgery list (most are default)

Declaration

  • I confirm that I either do not require pre-approval for this PR, or I have obtained such approval and have included a screenshot to demonstrate this below.

image
image
image


Changelog

🆑
add: Added xeno organs, which can be revitalized for unique effects
add: Added the ability to dissect xeno organs out of alien creatures
add: added the organ analyzer machine
add: added the dissection manager surgery tool
add: Added slime behavior for training and revitalization therapy for xeno organs
tweak: Tweaked a few items into the new xeno organ system (Xenomorph organs)
tweak: maint loot spawners rarely spawn organ mesh and dissectors
soundadd: Added a sound for the organ analyzer
imageadd: Added megafauna corpse sprites
/:cl:

EmeraldCandy and others added 30 commits February 23, 2024 12:19
ddsadsa
@github-actions github-actions bot removed the Merge Conflict This PR is merge conflicted label May 22, 2025
@EmeraldCandy
Copy link
Contributor Author

Organ extractors can now be used in place of a dissector too. When used as the final step, you are granted the organ without needing slime revitalization. Organ Quality chance is better than base extractor but worse than upgraded when used

Comment on lines 133 to 167
var/list/xeno_organ_results = list()
/// Does this creature have any special organ sprites?
var/list/custom_organ_states = list()
/// Contains the list for which paths are needed at each dissection step.
var/list/dissection_tool_step = list(
/datum/surgery_step/generic/dissect,
/datum/surgery_step/generic/cut_open,
/datum/surgery_step/generic/clamp_bleeders,
/datum/surgery_step/generic/retract_skin,
/datum/surgery_step/generic/dissect,
)
/// Contains specialty text for each dissection step.
var/list/dissection_text = list(
"<span class='notice'>You begin prepping the subject for dissection...</span>",
"<span class='notice'>You begin to make a careful incision into the subject's corpse.</span>",
"<span class='notice'>You begin clamping any cavities leaking fluids into the surgical site.</span>",
"<span class='notice'>You begin forcing the dissection cavity open.</span>",
"<span class='notice'>You begin removing an unidentifiable mass out of the subject!</span>",
)
/// Contains specialty text for dissection success steps
var/list/dissection_success_text = list(
"<span class='notice'>You successfully set up a dissection site.</span>",
"<span class='notice'>You successfully make an incision into the dissection site.</span>",
"<span class='notice'>You successfully clamp any leaking cavities.</span>",
"<span class='notice'>You successfully force the dissection cavity open.</span>",
"<span class='notice'>You remove some kind of unidentifiable mass from the subject!</span>",
)
/// Contains specialty text for dissection step failures
var/list/dissection_failure_text = list(
"<span class='warning'>The tool fails to get a grip on the corpse's surface!</span>",
"<span class='warning'>Your hand slips, slicing open the corpse in a wrong spot with the tool!</span>",
"<span class='warning'>Your hand slips, tearing some of the flesh from the subject and worsening the leakage!</span>",
"<span class='warning'>Your hand slips, tearing the edges of incision!</span>",
"<span class='warning'>The tool fails to remove the organ from the surrounding flesh!</span>",
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So what worries me about declaring these on /mob/living is that these lists are going to be allocated for every single living mob in the game. Most rounds we have ~500-800. I know BYOND will intern the strings but 6 extra lists on every mob is still expensive and we need to try and keep that number down, because it can balloon quickly.

Maybe this can all be pulled into a /datum/xenobio_surgery_procedure, then keyed to a global list of mob types to surgery procedures, and then only instantiated on the mob when a surgery is actually performed? So for example:

/mob/living
	...
	var/datum/xenobio_surgery_procedure/xenobio_surgery

/datum/xenobio_surgery_procedure
	var/list/xeno_organ_results = ...
	var/list/custom_organ_states = ...
	var/list/dissection_tool_step = ...
	var/list/dissection_test = ...
	var/list/dissection_success_text = ...
	var/list/dissection_failure_text = ...

/datum/xenobio_surgery_procedure/blobbernaut
	xeno_organ_results = ...
	...

GLOBAL_LIST_INIT(xenobio_dissection_surgeries, list(
	/mob/living/simple_animal/hostile/blob/blobbernaut = /datum/xenobio_surgery_procedure/blobbernaut,
	...
)

/whatever_proc_starts_the_surgery(mob/living/target)
	if(isnull(target.xenobio_surgery))
		if(target.type in GLOB.xenobio_dissection_surgeries)
			target.xenobio_surgery = new GLOB.xenobio_dissection_surgeries[target.type]
			// continue on our merry way

I know it'll be painful to restructure the PR after it's already implemented but the current implementation is very expensive in terms of memory. I can try and find some time this weekend to pull together a prototype and help move things over. Plus things will be very nicely organized after the fact, you'll end up with a directory of datums that is just xenobio surgery stuff so you can compare all of the different mob types in one place.

EmeraldCandy and others added 14 commits May 23, 2025 12:24
Co-authored-by: warriorstar-orion <[email protected]>
Signed-off-by: Kyani <[email protected]>
Co-authored-by: warriorstar-orion <[email protected]>
Signed-off-by: Kyani <[email protected]>
Co-authored-by: warriorstar-orion <[email protected]>
Signed-off-by: Kyani <[email protected]>
Co-authored-by: warriorstar-orion <[email protected]>
Signed-off-by: Kyani <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-Status: Awaiting review This PR is awaiting review from the review team Map Edit This PR will modify a map Requires Wiki Update Useful for Wiki Contributers to search for things that need updating Sound This PR modifies the game sound Sprites This PR modifies the game sprites Testmerge Active This PR is currently testmerged on production Testmerge Requested This PR has a pending testmerge request
Projects
None yet
Development

Successfully merging this pull request may close these issues.